#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

#define NUM 16

int main(){

    pid_t id = fork();

    if(id == 0){
        // 子进程                                                                     
        // 以子进程执行 ls -a -l 程序命令为例
        printf("子进程开始运行：%d\n",getpid());
        sleep(1);
        char* _argv[NUM] = {
          	"ls",
            "-l",
            "-a",
            NULL
        };
        execvp("ls",_argv);
        exit(1);
    }else if(id > 0){
        // 父进程
        printf("父进程开始运行，pid：%d\n", getpid());
        int status = 0;
        pid_t id = waitpid(-1, &status, 0);     // 阻塞等待：一定是子进程执行完毕，然后父进程获取之后，才退出！
        if(id > 0){
            printf("wait success, exit code : %d\n",WEXITSTATUS(status));
        }
    }else{
        // 失败
        perror("fork()");
        exit(1);
    }

    return 0;
}
